#include <QString>
#include "booktablemodel.h"

/**
 * @brief 表格模型构造函数
 * @param parent
 */
BookTableModel::BookTableModel(QWidget *parent) :
    QAbstractTableModel(parent),
    headers({"author", "title", "year", "month", "doi"})
{
}

/**
 * @brief 表格模型构造函数
 * @param input: 输入的bib文件的内容
 * @param parent: 父对象
 */
BookTableModel::BookTableModel(QString const & input, QWidget *parent) :
    QAbstractTableModel(parent),
    list(input),
    headers({"author", "title", "year", "month", "doi"})
{
}

BookTableModel::~BookTableModel() {
}

/**
 * @brief 重载基类的|rowCount|函数
 * @param parent
 * @return 表格行数
 */
int BookTableModel::rowCount(const QModelIndex &parent) const {
    Q_UNUSED(parent);
    return list.size();
}

/**
 * @brief 重载基类的|columnCount|函数
 * @param parent
 * @return 表格列数
 */
int BookTableModel::columnCount(const QModelIndex &parent) const {
    Q_UNUSED(parent);
    return headers.size();
}

/**
 * @brief 重载基类的|data|函数
 * @param index: 数据的行列数
 * @return |index|相应位置要显示的数据
 */
QVariant BookTableModel::data(const QModelIndex &index, int role) const {
    if(role == Qt::DisplayRole) {
        return list.at(index.row(), headers[index.column()]);
    }
    return QVariant();
}

/**
 * @brief 重载基类的|headerdata|函数
 * @param section
 * @param orientation
 * @param role
 * @return 表头信息
 */
QVariant BookTableModel::headerData(int section, Qt::Orientation orientation, int role) const {
    if(role == Qt::DisplayRole && orientation==Qt::Horizontal)
        return headers[section];
    return QAbstractTableModel::headerData(section, orientation, role);
}

/**
 * @brief 向表格末尾中添加一个bib条目
 * @param s: 要添加条目的bib字符串
 */
void BookTableModel::addItem(QString const & s) {
    beginResetModel();
    list.append(s);
    endResetModel();
}

/**
 * @brief 删除表格中|index|处的条目
 * @param index
 */
void BookTableModel::erase(int index) {
    beginResetModel();
    this->list.erase(index);
    endResetModel();
}

void BookTableModel::populataModel() {

}
